package administrator;

import java.sql.*;

import javax.swing.JOptionPane;

import utils.util;

import connector.MysqlConnector;
import excepciones.DBException;

public class Administrator {
	
	private MysqlConnector con;
	private String database = "parquimetros";
	
	private String[] lasQueryFields;
	
	public Administrator(){
		
	}
	
	public void connect(String user, String password) throws DBException{
		checkGrants(user);
		this.con = new MysqlConnector("localhost", database, user, password);
	}
	
	private void checkGrants(String user) throws DBException{
		if (user.equals("admin")) {
			System.out.println("El usuario es administrador.");
		}
		else{
			System.out.println("El usuario ingresado no es adminisrtador.");
			throw new DBException("El usuario ingresado no es adminisrtador.");
		}
	}
	
	public String[][] ejecutarConsulta(String sql) throws DBException{
		try
		{
			ResultSet rs = this.con.query(sql);
		
			String[][] toReturn = util.resultToString(rs);
			
			if(toReturn != null){
				try{
					this.lasQueryFields = util.resultFieldNames(rs);
					return toReturn;
				}
				catch(Exception ex){
					System.out.println("Se supone esto nunca pase!");
				}
			}else{
				throw new DBException("Error al ejecutar la consulta. \n"+this.con.getLastUserError());
			}
			return null;
		}
		catch (Exception ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage(), "Administrador", JOptionPane.ERROR_MESSAGE);
			return null;
		}
	}
	
	public boolean ejecutarUpdate(String sql) throws DBException{
		boolean rs = false;
		try
		{
			rs = this.con.update(sql);
		}
		catch (DBException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage(), "Administrador", JOptionPane.ERROR_MESSAGE);
		}
		return rs;
	}
	
	public String[] getLastQueryFields(){
		return this.lasQueryFields;
	}
	
	public String[][] getTableNames() throws DBException{
		String[][] toReturn = util.resultToString(this.con.query("SHOW TABLES IN "+database));
		if(toReturn != null){
			return toReturn;
		}else{
			throw new DBException("Error al conseguir los nombres de las tablas.");
		}
	}
	
	public String[][] getTableFields(String table) throws DBException{
		String[][] toReturn = util.resultToString(this.con.query("SHOW COLUMNS FROM "+table));
		if(toReturn != null){
			return toReturn;
		}else{
			throw new DBException("Error al conseguir los campos de la tabla "+table+".");
		}
	}
}
